// 深度优先遍历
// 访问根节点 对根节点的没有访问过的相邻节点挨个进行深度优先遍历
const graph = {
  0: [1,2],
  1: [2],
  2: [0, 3],
  3: [3]
}
// const visited = new Set()
// const dfs = (n) => {
//   console.log(n)
//   visited.add(n)
//   graph[n].forEach(c => {
//     if(!visited.has(c)){
//       dfs(c)
//     }
//   })
// }
// dfs(2)
// 广度优先
// 新建一个队列 把根节点入队 把对头出队并访问 把对头没有访问过的相邻节点入队
// 重复
const visited = new Set()
visited.add(2)
const q = [2]
while(q.length) {
  const n = q.shift()
  graph[n].forEach(c => {
    if(!visited.has(c)) {
      q.push(c)
      visited.add(n)
    }
  })
}